# -*- coding: utf-8 -*-
import numpy as np
import cv2
# Canny边缘检测
# 1.使用高斯滤波器，以平滑图像，滤除噪声
# 2.计算图像中每个像素点的梯度强度和方向
# 3.应用非极大值(Non-Maxumum Suppression)抑制，以消除边缘检测带来的杂散相应
# 4.应用双阈值(Double-Threshold)检测来确定真是的和谐潜在的边缘
# 5.通过抑制孤立的弱边缘最终完成边缘检测

#高斯滤波器-梯度和方向Sobel算子-非极大值抑制：比较当前点和周围两点梯度的幅值大小，若当前点是最大则保存，否则就抑制
# --双阈值检测：梯度值大于最大值则处理为边界；最小值<梯度值<最大值则连有边界则保留，否则舍弃；梯度值小于最小值则舍弃；
def cv_show(img,name,writename):
    cv2.imshow(name,img)
    cv2.imwrite(writename,img)
    cv2.waitKey()
    cv2.destroyAllWindows()

img = cv2.imread('lena.jpg',0)
v1 = cv2.Canny(img,100,200)
v2 = cv2.Canny(img,40,200)
v3 = cv2.Canny(img,40,100)
v4 = cv2.Canny(img,20,50)
# 指定的边界越小检测得越详细
res = np.hstack((v1,v2,v3,v4))
cv_show(res,'res','res.jpg')
